'use strict'

const expect = require('chai').expect
const Rollback = require('../../../../lib/plugins/rollback')
const Serverless = require('../../../../lib/serverless')

describe('Rollback', () => {
  let rollback
  let serverless

  beforeEach(() => {
    serverless = new Serverless({ commands: [], options: {} })
    rollback = new Rollback(serverless)
  })

  describe('#constructor()', () => {
    describe('when dealing with normal rollbacks', () => {
      it('should have the command "rollback"', () => {
        // eslint-disable-next-line no-unused-expressions
        expect(rollback.commands.rollback).to.not.be.undefined
      })

      it('should have a lifecycle events initialize and rollback', () => {
        expect(rollback.commands.rollback.lifecycleEvents).to.deep.equal([
          'initialize',
          'rollback',
        ])
      })

      it('should not have a required option timestamp', () => {
        // eslint-disable-next-line no-unused-expressions
        expect(rollback.commands.rollback.options.timestamp.required).to.be
          .false
      })
    })

    describe('when dealing with function rollbacks', () => {
      it('should have the command "rollback function"', () => {
        // eslint-disable-next-line no-unused-expressions
        expect(rollback.commands.rollback.commands.function).to.not.be.undefined
      })

      it('should have a lifecycle event rollback', () => {
        expect(
          rollback.commands.rollback.commands.function.lifecycleEvents,
        ).to.deep.equal(['rollback'])
      })

      it('should have a required option function', () => {
        // eslint-disable-next-line no-unused-expressions
        expect(
          rollback.commands.rollback.commands.function.options.function
            .required,
        ).to.be.true
      })
    })
  })
})
